perm filename CL.FAI[TMP,LCS] blob
sn#496911 filedate 1980-02-12 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT AND CLIPS*****
C00015 ENDMK
Cā;
; THIS CONVERTS PLOTTER FORMAT TO 11/40 DPY FORMAT AND CLIPS*****
TITLE CONV
INTERNAL GET,NVECT
EXTERNAL PUTEXT,EXTOUT,FINEXT
CH3ā15 ; SGZ=SEGMENT NUM., SGZ+1=SIZE FACTOR (FOR DISPLACEMENT)
IARRAY: BLOCK =13500 ; common/IARRAY/IARRAY(13500) /SGZ/ISEG,SZ,SEGSZ
SGZ: BLOCK 3
N: 0
ZSHIFT: 0
XSHIFT: 0 ;THESE FOR VERSATEC ROTATION
WSHIFT: =178 ;PAPER PRINTS "SIDEWAYS". THIS CENTERS STANDARD STAFF.
YSHIFT: 0
I: 0
J: 0
K: 0
QBOT: 0 ;BOTTOM OF CLIPPED AREA (200) or (-200)
QTOP: 0 ;TOP OF CLIPPED AREA (600)
SEGSZ: =800 ;DOES 4 INCH SEGMENT FOR NOW
TOPX: =600
GET: 0
BEG: OUTSTR[ASCIZ/FILE NAME (DEFAULT=PLT) /]
INCHWL 1
CAIN 1,15 ; LOOK FOR CR.
JRST DFAULT
SETZM DIR ; THE FILE NAME WILL BE HERE.
SKIPA 2,[POINT 6,DIR]
GOT: INCHWL 1
CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
JRST DONE
SUBI 1,40
IDPB 1,2
JRST GOT
DFAULT: MOVE 1,[SIXBIT/PLT/]
MOVEM 1,DIR
DONE: INIT CH3,17
SIXBIT/DSK/
0
0
MOVE 0,[SIXBIT/PLT/]
MOVEM 0,DIR+1
SETZM DIR+2
SETZM DIR+3
LOOKUP CH3,DIR
HALT ;DID NOT FIND FILE
SETZM DIR+1
; MOVE 1,SGZ+2 ;GET BIG SHIFT (TEMPORARY FEATURE ?)
; SKIPE 1
; SOJ 1,
; IMULI 1,=1700 ;SHIFT=(ISHIFT-1)*1700
MOVE SEGSZ
SKIPN 2,SGZ+2 ;IS THERE A SEGMENT SIZE?
JRST SGX ;NO
FMPRI 2,(200.0)
KIFIX 0,2 ;CHANGE INCHES TO STEPS (200/INCH)
SGX: MOVEM SEGX#
SKIPE 2,SGZ+1 ;GET SIZE FACT.
FSBRI 2,(1.0) ;YSHIFT=(SZFAC-1)*850+178
FMPR 2,[850.0]
KIFIX 2,2
SKIPE 1,SGZ ;GET SEGMENT NUMBER SEG 0 IS SAME AS SEG 1.
SOJ 1, ;SEG=600-(SEG-1)*800
IMUL 1,SEGX ;SEGSZ FOR NOW=800
SUB 1,WSHIFT
SUB 1,2 ;ADD IN FROM ABOVE
MOVNM 1,YSHIFT
TTOP: MOVE TOPX
MOVEM QTOP ;TOP=600, BOT=-200 FOR NOW
SUB SEGX ;SUBTRACT SEGMENT SIZE (4 INCHES FOR NOW)
MOVEM QBOT
SETOM INVI# ; FOT 2 INIVIS VECTS IN A ROW (EOF)
SETZM N ;FOR CLIPPER
MOVE ZSHIFT
MOVEM XSHIFT ;FOR RE-STARTS
SETZ 10, ;FLIP-FLOP FOR CONSECUTIVE INVIS. VECTS.
SETO 15, ;INITIALIZE XSHIFT (REALLY YSHIFT BECAUSE ROTATED.)
SETOM PREV ;INITIALIZE FLAG FOR SKIPPING UNNEEDED INVISIBILES.
SETZM IARRAY ;ZERO 1ST WORD.
MOVEI 11,1 ;MAIN ARRAY COUNTER(FILL IN 1ST 2 WORDS AT END)
INP: HRRZI 0,M
SUBI 0,1
MOVEM 0,COM
MOVNI 0,=128
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
MOVEI 6,1 ;COUNTER
LUP: MOVEI 5,M
ADDI 5,(6)
MOVE 2,(5) ; UNPAC ROUTINE
LSHC 2,-10 ; 14 BITS, 14 BITS, 8 BITS
ASH 3,-34
JUMPE 3,NOVEC ;IF(PEN.EQ.0)GO TO NOVEC START OF 128 WD SEGMENT.
MOVE 7,3 ;MOVEM 3,K KEEP IT FOR 11/40 CONVERSION
LSHC 2,-16
ASH 3,-26
MOVEM 3,J
LSHC 2,-16
ASH 3,-26
MOVEM 3,I
MOVEI 12,106 ;VISIBLE PACKS IN 11/40 FORMAT
CAIN 7,2
JRST VVV
JUMPG 7,SHIFT ;IS IT -3??
AOJLE 15,SHFT1 ;AOJ 15, ; YES
;; JUMPLE 15,MORE ; SKIP FIRST TIME IT HAPPENS
MOVE J ; GET SHIFT FOR NEXT ORIGINAL INPUT FILE
SHFT2: ADDM XSHIFT ; UPDATE SHIFT (FIRST TIME IT'S ZERO)
JRST MORE
SHFT1: MOVNI =512 ;FIRST TIME SUBTRACT 512 FROM SHIFT
ADD J
JRST SHFT2
SHIFT: CAME 7,PREV# ;ARE THERE 2 3'S IN A ROW?
JRST SHFT3 ;NO
SKIPGE N ;IF(N.LT.0)SKIP THIS NEXT. N CAN BE 0,1,-1
JRST SHFT3
SKIPN 10 ;DID WE DO THIS ALREADY?
SOJ 11, ;NO, OMIT LAST ONE BY DECREMENTING COUNTER
SETO 10, ; =-1 SO WE DON'T DO 2 INVIS. IN A ROW
JRST MORE ;****** SKIP NEXT IF REPEATING ITSELF.
SHFT3: MOVEI 12,146 ;INVISIBLE
SKIPA
VVV: SETZ 10, ;RESET FLIP-FLOP
MOVEM 7,PREV ;SAVE PEN INFO FOR NEXT TIME AROUND
MOVE 13,J ;JSA 16,PLOT
ADD 13,XSHIFT ;***** X AND Y ARE ROTATED -90 DEG. ON VERSATEC!!!
MOVN 14,I ;JUMP I PACKS BITS - 11,11,14
SUB 14,YSHIFT ;NEEDED Y SHIFT FOR PLOT.SAV (VERSATEC CONV. PROG.)
;; ABOVE 2 CAUSE -90 DEG. ROTATION. MOVE 13,I ;JSA 16,PLOT
;; MOVE 14,J ;JUMP I PACKS BITS - 11,11,14
MOVEI 16,CLPX ;LOC. OF ARGS. FOR CLIPPER
JRST CLIP ;PUSHJ 17,CLIP
VZZ: SKIPGE N ;IF(N.LT.0)WAIT TIL NEXT VECTOR FOR CLIPPED POS.
JRST MORE
VEC1: DPB 13,[POINT 11,12,10] ;JUMP J
DPB 14,[POINT 11,12,21] ;JUMP K
AOJ 11,
MOVEM 12,IARRAY(11) ;CAMGE 6,M
;XXX NOT NEEDED IF NOVEC TRAP IS OK. CAMG 6,M
MORE: AOJA 6,LUP
MOVE 2,M
CAIN 2,=127
JRST INP
JRST NV
;NOVEC: MOVE 2,M
; CAIN 2,=127
; JRST INP
NOVEC: AOS INVI
SKIPG INVI
JRST MORE
;; CAIE 7,2 ;WAS LAST VECTOR VISIBLE OR NOT?
;; SOJ 11, ;NO, SO DELETE IT. (BACKUP ONE WORD.)
;; SOJ 11, ;PUT A 0 WORD, THEN TOTAL WORD-COUNT LESS 2
; MOVEM 11,IARRAY+1 ;INTO 2ND WORD. THEN EXIT
NV: OUTSTR[ASCIZ/WRITING P.PLT
/]
JSA 16,PUTEXT
JUMP [ASCIZ/P /]
JUMP [ASCIZ/PLT/]
JSA 16,EXTOUT
JUMP M
JUMP 11
JSA 16,FINEXT
EXIT
CLPX: JUMP 13
JUMP 14
JUMP 7
NVECT: MOVEI 4,146 ; NEW VECTOR POINT - FROM CLIP ROUTINE
;; MOVE 1,@2(16) ;VIS. OR INVIS.?
;; CAIE 1,2
;; MOVEI 4,106 ;VIS.
MOVE 1,@(16) ;GET NEW J
MOVE 2,@1(16) ;GET NEW K
VEC2: DPB 1,[POINT 11,4,10] ;JUMP J
DPB 2,[POINT 11,4,21] ;JUMP K
AOJ 11,
MOVEM 4,IARRAY(11)
JRST VZZ ;POPJ 17,
COM: OCT 0,0
BLKNUM: 0
M: BLOCK =128
DIR: BLOCK 4
CL: 0
MOVE 10,@(16) ;X1
MOVE 11,@1(16) ;X2
MOVE 15,11
SUB 15,10
FLTR 15,15 ;R
MOVE 14,@3(16) ;Y2
SUB 14,@2(16) ;Y2-Y1
FLTR 14,14
FDVR 14,15 ;Q=(Y2-Y1)/(X2-X1)
QX: MOVE 1,10 ;W1=X1
CAMGE 10,@10(16) ;IF(X1.LT.LFT)W1=LFT
MOVE 1,@10(16)
CAMLE 10,@11(16) ;IF(X1.GT.RT)W1=RT
MOVE 1,@11(16) ;W1 IS AC1
W1X: MOVEM 1,@4(16)
SUB 1,10 ;W1-X1
FLTR 1,1
FMPR 1,14 ;*Q
KIFIX 1,1
ADD 1,@2(16) ;+Y1
MOVEM 1,@6(16)
Z1X: MOVE 1,11 ;W2=X2
CAMGE 11,@10(16)
MOVE 1,@10(16)
CAMLE 11,@11(16)
MOVE 1,@11(16) ;W2 IS AC1
MOVEM 1,@5(16)
W2X: SUB 1,11 ;X2-W2
FLTR 1,1
FMPR 1,14 ;*Q
KIFIX 1,1
ADD 1,@3(16) ;Y2-Q*(X2-W2)
MOVEM 1,@7(16) ;Z2
Z2X: JRA 16,12(16)
XXX: 0
YYY: 0
LFT: -=500
RT: =500
TOP: =500
BOT: -=500
CLIP: JFCL ;MOVE SVPEN ; IMPLICIT INTEGER (A-Z)
; CAIE 3 ; DATA A/100/,B/500/,C/300/,D/100/
; JRST CL1 ;1 FORMAT(' TYPE INITIAL X,Y '$)
; MOVE SVX ; 2 FORMAT(10I)
; MOVEM XXX# ; TYPE 1
; MOVE J ; ACCEPT 2,XX,YY
; MOVEM YYY# ;3 FORMAT(' TYPE NEXT X,Y '$)
; JRST XENOUT ;JRST ENOUT ;4 TYPE 3
CL1: MOVE XXX ; ACCEPT 2,X2,Y2
MOVEM XX# ; XX=XXX
MOVE 1,YYY ; YY=YYY
MOVEM 1,YY# ; XXX=X2
MOVE 2,I ; YYY=Y2
MOVEM 2,XXX ; IF(X1.GE.A.AND.X1.LE.C.AND.X2.GE.A.AND.X2.LE.C.AND.
MOVE 3,J ;1 Y1.GE.D.AND.Y1.LE.B.AND.Y2.GE.D.AND.Y2.LE.B)GO TO 300
MOVEM 3,YYY ;C GO TO 300 IF ALL POINTS ARE INBOUNDS.
CAMGE LFT ;NEXT TO FIND IF LINE IS ALL OUT OF BOUNDS
CAML 2,LFT
SKIPA
JRST XENOUT ;BOTH X1 AND X2 ARE TO LEFT OF WINDOW
CAMLE RT
CAMG 2,RT
SKIPA
JRST XENOUT ;BOTH ARE TO RIGHT OF WINDOW
CAMGE 1,BOT
CAML 3,BOT
SKIPA
JRST XENOUT ;BOTH Y1 AND Y2 ARE BELOW WINDOW
CAMLE 1,TOP
CAMG 3,TOP
SKIPA
JRST XENOUT ;BOTH ARE ABOVE WINDOW
CAML LFT ; NOW SOME PART OF LINE MIGHT BE IN BOUNDS
CAMLE RT
JRST CL2
CAML 2,LFT
CAMLE 2,RT
JRST CL2
CAML 1,BOT
CAMLE 1,TOP ;AC0=X1, 2=X2, 1=Y1, 3=Y2
JRST CL2
CAML 3,BOT
CAMLE 3,TOP
JRST CL2
MOVE 12,Q12# ;GET BACK Y
JRST VZZ ;POPJ 17, ;ALL INBOUNDS
CL2: JSA 16,CL ;100 CALL CL(XX,X2,YY,Y2,W1,W2,Z1,Z2,A,C)
JUMP XX
JUMP I
JUMP YY
JUMP J
JUMP W1#
JUMP W2#
JUMP Z1#
JUMP Z2#
JUMP LFT
JUMP RT
MOVE YY ; IF(Z1.LT.D.AND.Z2.LT.D)GO TO 4
MOVE 1,J
CAMLE TOP
CAMG 1,TOP ; IF(Z1.GT.B.AND.Z2.GT.B)GO TO 4
SKIPA
JRST XENOUT
CAMGE BOT
CAML 1,BOT
JRST XCL
XENOUT: SETOM N
JRST VZZ ;POPJ 17, ;OUT OF BOUNDS
XCL: JSA 16,CL ;200 CALL CL(Z1,Z2,W1,W2,YY,Y2,XX,X2,D,B)
JUMP Z1
JUMP Z2
JUMP W1
JUMP W2
JUMP YY ;300 TYPE 2,XX,YY,X2,Y2
JUMP J ; GO TO 4
JUMP XX ; END
JUMP I
JUMP BOT
JUMP TOP
JRST VZZ ;POPJ 17,
END BEG